package co.com.coomeva.adminEvaluacion.logica;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Criteria;
import org.hibernate.LockMode;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;

import co.com.coomeva.adminEvaluacion.modelo.entidades.EdPItem;
import co.com.coomeva.adminEvaluacion.modelo.entidades.EdPRolUsuario;
import co.com.coomeva.adminEvaluacion.modelo.persistencia.EdPItemDAO;
import co.com.coomeva.adminEvaluacion.modelo.persistencia.EdPRolUsuarioDAO;

/**
 * A data access object (DAO) providing persistence and search support for
 * EdPRolUsuario entities. Transaction control of the save(), update() and
 * delete() operations can directly support Spring container-managed
 * transactions or they can be augmented to handle user-managed Spring
 * transactions. Each of these methods provides additional information for how
 * to configure it for the desired type of transaction control.
 * 
 * @see co.com.coomeva.adminEvaluacion.modelo.entidades.EdPRolUsuario
 * @author MyEclipse Persistence Tools
 */

public class EdPRolUsuarioLogica {
	
	private static EdPRolUsuarioLogica rolLogica = null;
	
	//Objeto con el que se accede a la BD
	private EdPRolUsuarioDAO rolDAO = null;
	
	public EdPRolUsuarioLogica() {
		rolDAO = new EdPRolUsuarioDAO();
	}
	
	public static EdPRolUsuarioLogica getInstance()	{
		if(rolLogica == null) {
			rolLogica = new EdPRolUsuarioLogica();
		}
		return rolLogica;
	}	
	
	@SuppressWarnings("unchecked")
	public List<EdPRolUsuario> consultarRoles(Long consRol, String rol) throws Exception {

		Session session = rolDAO.getSession();
		List<EdPRolUsuario> valorList = new ArrayList<EdPRolUsuario>();
		
		try {
			Criteria criterios = session.createCriteria(EdPRolUsuario.class);
			if (consRol != null && consRol.longValue() > 0)
				criterios.add(Expression.eq("consRol", consRol));
			
			if (rol != null)
				criterios.add(Expression.ilike("rol", rol, MatchMode.ANYWHERE));
									
			criterios.addOrder(Order.asc("consRol"));
			valorList = criterios.list();
		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error consultando los registros");
		} finally {
			rolDAO.getSession().clear();
			rolDAO.getSession().close();
		}
		return valorList;
	}
	
	@SuppressWarnings("unchecked")
	public List<EdPRolUsuario> consultarRolesXCargo(String codCargo) throws Exception {

		Session session = rolDAO.getSession();
		List<EdPRolUsuario> valorList = new ArrayList<EdPRolUsuario>();
		
		try {
			//System.out.println("codCargo = " + codCargo);
			if (codCargo != null && Long.parseLong(codCargo) > 0){
				Criteria criterios = session.createCriteria(EdPRolUsuario.class);
				criterios.add(Expression.eq("consRol", Long.parseLong(codCargo)));
									
				criterios.addOrder(Order.asc("consRol"));
				valorList = criterios.list();
			}
		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error consultando los registros");
		} finally {
			rolDAO.getSession().clear();
			rolDAO.getSession().close();
		}
		return valorList;
	}
	
}